
#ifndef __PLACE_HOLDER_H__
#define __PLACE_HOLDER_H__

#include "object.h"

////////////////////////////////////////////////////////////////////////
//  Declaration                                                       //
////////////////////////////////////////////////////////////////////////

template < typename value_type >
class placeholder : public object
{
public:
	placeholder ( const value_type & value ) ;
	~placeholder ( void ) ;

public:	// inherit overriding
	const std::type_info &	type ( void ) const ;	// interface object
	object *				clone ( void ) const ;	// interface object

private:
	value_type		value_ ;
} ;


////////////////////////////////////////////////////////////////////////
//  Definition                                                        //
////////////////////////////////////////////////////////////////////////

template < typename value_type >
placeholder<value_type>::placeholder ( const value_type & value )
:	value_ ( value )
{
	printf ( "%s(): value_type:%s\n", __FUNCTION__, typeid(value_type).name() ) ;
}

template < typename value_type >
placeholder<value_type>::~placeholder ( void )
{

}

template < typename value_type >
const std::type_info & placeholder<value_type>::type ( void ) const
{
	return typeid ( value_type ) ;
}

template < typename value_type >
object * placeholder<value_type>::clone ( void ) const
{
	return new placeholder ( value_ ) ;
}

#endif	// #ifndef __PLACE_HOLDER_H__